import json

from ollama import Client
from config import OLLAMA_MODEL, OLLAMA_HOST
from domain.pd import ProductTitle  # 需包含 keyword 和 title 字段，title 限定 max_length=30

def get_product_title_from_ollama(keyword_input):
    client = Client(host=OLLAMA_HOST)

    # 当前关键词
    # keyword_input = "蓝牙耳机，运动，降噪"

    # 构造历史对话（系统角色+多轮问答）
    messages = [
        {
            "role": "system",
            "content": (
                "你是一个电商文案生成专家，专门为淘宝、京东、拼多多生成30字以内的简洁商品标题。"
                "所有回复都必须为严格的JSON格式，字段包括 keyword 和 title，title 不得超过30个字符。"
                "不要输出任何解释或多余内容。"
            )
        },
        # 历史对话1
        {"role": "user", "content": "关键词：无线鼠标，静音，轻薄，便携"},
        {"role": "assistant", "content": '{"keyword": "无线鼠标，静音，轻薄，便携", "title": "静音轻薄无线鼠标 便携办公"}'},
        # 历史对话2
        {"role": "user", "content": "关键词：笔记本支架，可调节，铝合金"},
        {"role": "assistant", "content": '{"keyword": "笔记本支架，可调节，铝合金", "title": "可调节铝合金笔记本支架"}'},
        # 当前对话
        {
            "role": "user",
            "content": (
                f"关键词：{keyword_input}\n"
                f"请生成标题，格式如上，title 不超过30字。"
            )
        }
    ]

    # 发起请求
    response = client.chat(
        model=OLLAMA_MODEL,
        messages=messages,
        format=ProductTitle.model_json_schema(),
        options={"temperature": 0.2}
    )

    # 验证并输出
    product = ProductTitle.model_validate_json(response.message.content)
    print("✅ 生成成功：", product)
    print(product.model_dump_json())
    return product.model_dump_json()

if __name__ == "__main__":
    get_product_title_from_ollama("蓝牙耳机，运动，降噪")
